
import Vue from 'vue';
import App from './App';

Vue.config.productionTip = false;

App.mpType = 'app';

// 引入全局 uView 框架
import uView from 'uview-ui';
Vue.use(uView);


// 全局存储 vuex 的封装
import store from '@/store';

// 引入 uView 提供的对 vuex 的简写法文件
let vuexStore = require('@/store/$u.mixin.js');
Vue.mixin(vuexStore);

// 引入 uView 对小程序分享的 mixin 封装
let mpShare = require('uview-ui/libs/mixin/mpShare.js');
Vue.mixin(mpShare);

// Vue i18n 国际化
import VueI18n from '@/common/vue-i18n.min.js';
Vue.use(VueI18n);

// i18n 部分的配置，引入语言包，注意路径
import lang_zh_CN from '@/common/locales/zh_CN.js';
import lang_en from '@/common/locales/en.js';

const i18n = new VueI18n({
	// 默认语言
	locale: 'zh_CN',
	// 引入语言文件
	messages: {
		'zh_CN': lang_zh_CN,
		'en': lang_en,
	}
});

// 由于微信小程序的运行机制问题，需声明如下一行，H5和APP非必填
Vue.prototype._i18n = i18n;
const app = new Vue({
	i18n,
	store,
	...App
});

// 本地缓存
import '@/api/service/store-service.js'

// http 拦截器，将此部分放在 new Vue() 和 app.$mount() 之间，才能 App.vue 中正常使用
import httpInterceptor from '@/common/http.interceptor.js';
Vue.use(httpInterceptor, app);

// http 接口 API 抽离，免于写 url 或者一些固定的参数
import httpApi from '@/common/http.api.js';
Vue.use(httpApi, app);

import { loger } from '@daelui/dogjs/dist/components.js'
loger.isDebug = true
// loger.isDebugInfo = true
loger.isDebugWarn = true
loger.isDebugError = true

// 服务模拟数据
import './static/mock/index.js'

// 是否载入完成
Vue.prototype.$onLaunched = new Promise(resolve => {
	Vue.prototype.$isResolve = resolve
})

// 是否是登录状态
Vue.prototype.isOnline = function () {
  return this.$store?.state?.vuex_mode === 'online'
}

// 是否有网
Vue.prototype.hasNetwork = function () {
	return new Promise((resolve, reject) => {
		// 查看网络状态
		uni.getNetworkType({
			success: (res) => {
				let b = false
				if (res.networkType !== 'none') {
					b = true
				}
				resolve(b)
			},
			fail: (e) => {
				reject(e)
			}
		})
	})
}

// 获取页面路由
Vue.prototype.getRoute = function () {
  let routes = getCurrentPages() // 获取当前打开过的页面路由数组
  let curRoute = routes[routes.length - 1].route //获取当前页面路由
  return curRoute
}

// 获取页面参数
Vue.prototype.getParams = function () {
  let routes = getCurrentPages() // 获取当前打开过的页面路由数组
  let curParam = routes[routes.length - 1].options || {} // 获取参数
  return curParam
}

// 生成请求参数
Vue.prototype.createQuery = function (params) {
  let query = []
  for (let key in params) {
    let value = params[key]
    if (value !== undefined && value !== null) {
      query.push(key + '=' + value)
    }
  }
  return query.join('&')
}

// 返回
Vue.prototype.goBack = function (url) {
  const pages = getCurrentPages()
  if (pages.length > 1) {
    uni.navigateBack()
  } else {
    uni.switchTab({
      url: url || '/pages/sys/workbench/index?source=back'
    })
  }
}

// 获取当前登录用户
Vue.prototype.getCurrentUser = function () {
  let users = this.$store.state.vuex_users
  users = Array.isArray(users) ? users : []
  let lastUser = this.$store.state.vuex_user
  let user = users.find(item => item.userName === lastUser.userName)
  return user
}

// 是否是APP
Vue.prototype.isPlus = function () {
  return typeof plus === 'object' && typeof plus.io === 'object'
}

// 格式化日期
Vue.prototype.formatDate = function (data, { isYear } = {}) {
  for (let key in data) {
    if (/T\d+/.test(data[key])) {
      data[key] = data[key].replace(/T\d+.+/, '')
    }
  }
  return data
}
// 按时间排序
Vue.prototype.sortByDate = function (list) {
  list = list.sort(function(a, b){
    if (a.updateTime && b.updateTime) {
      a = new Date(a.updateTime)
      b = new Date(b.updateTime)
      return a > b ? -1 : a === b ? 0 : 1
    } else if (a.createTime && b.createTime) {
      a = new Date(a.createTime)
      b = new Date(b.createTime)
      return a > b ? -1 : a === b ? 0 : 1
    } else {
      return 1
    }
  })
  return list
}

app.$mount();

